#include <iostream>

using namespace std;

/**
 * 动态内存分配
*/

void sample(){
    double* pvalue  = NULL; // 初始化为 null 的指针
    pvalue  = new double;   // 为变量请求内存

    delete pvalue;        // 释放 pvalue 所指向的内存
}

void judge(){
    double* pvalue  = NULL;
    // 如果自由存储区已被用完，可能无法成功分配内存。所以建议检查 new 运算符是否返回 NULL 指针，并采取以下适当的操作：
    if( !(pvalue  = new double ))
    {
    cout << "Error: out of memory." <<endl;
        exit(1);
    }
}

void array(int m){
    // 动态分配,数组长度为 m
    int *array=new int [m];
 
    //释放内存
    delete [] array;
}

void doubleArray(int m, int n){
    int **array;
    // 假定数组第一维长度为 m， 第二维长度为 n
    // 动态分配空间
    array = new int *[m];
    for( int i=0; i<m; i++ )
    {
        array[i] = new int [n] ;
    }
    //释放
    for( int i=0; i<m; i++ )
    {
        delete [] array[i];
    }
    delete [] array;
}

void threeArray(int m, int n, int h){
    int ***array;
    // 假定数组第一维为 m， 第二维为 n， 第三维为h
    // 动态分配空间
    array = new int **[m];
    for( int i=0; i<m; i++ )
    {
        array[i] = new int *[n];
        for( int j=0; j<n; j++ )
        {
            array[i][j] = new int [h];
        }
    }
    //释放
    for( int i=0; i<m; i++ )
    {
        for( int j=0; j<n; j++ )
        {
            delete[] array[i][j];
        }
        delete[] array[i];
    }
    delete[] array;
}

class Box
{
   public:
      Box() { 
         cout << "调用构造函数！" <<endl; 
      }
      ~Box() { 
         cout << "调用析构函数！" <<endl; 
      }
};
 
void object(int n)
{
   Box* myBoxArray = new Box[n];
 
   delete [] myBoxArray; // 删除数组
}